// 这个是拆模块注意是用户的模块
// 导入需要的API接口
import { getUserInfoAPI } from '@/api/user.js'
// 用户vuex模块，专门用来存储用户的信息
export default {
  // 为模块开启“命名空间”
  namespaced: true,
  // 模块的state必须是函数，return一个对象
  state() {
    return {
      // 登录成功之后，用户的token存到全局
      token: '',
      // 用户的基本信息，将来多个组件都会用到这份数据
      info: {}
    }
  },
  mutations: {
    // 更新全局token的值，谁调用这个函数谁传值
    updateToken(state, token) {
      state.token = token
    },
    // 给state中的info赋值
    updateInfo(state, obj) {
      state.info = obj
    }

  },
  // 异步操作
  actions: {
    // 获取用户的基本信息
    // 这里是在创建这个函数，这个函数需要在Main.vue中进行调用
    async initUser(ctx) {
      // 1.调用API接口，获取用户的信息，调用接口之前需要在user.js中进行封装，调这个接口之前需要在此文件中导入user.js中封装的接口
      const { data: res } = await getUserInfoAPI()
      // console.log(res)这里能够直接打印res是因为在main.vue里面创建了生命周期函数中的create(){}在这个函数里面调用了initUser函数，所以当main组件一创建的时候就能够执行这个函数
      if (res.code === 0) {
        // TODO:要把res.data对象，赋值给state中的info对象，需要通过mutations中的函数来赋值，所以需要调用mutations里面的函数
        // 在自己的模块中，调用自己的mutationa函数，不需要用/分隔
        // 通过ctx.commit来调用mutations里面的函数
        ctx.commit('updateInfo', res.data)
      }
      // 2.把用户的信息，存储到info中
    }
  }
}
